package com.yumingjaing.flow.jdk;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.SubmissionPublisher;

/**
 * @description:
 * @author: John
 * @version: SubTest.java, v1.0 2025年06月15日 22:42
 */
public class SubTest {
    public static void main(String[] args) {
        // 只有一个工作线程的线程池
        ExecutorService executor = Executors.newFixedThreadPool(1);
        // 指定缓冲区的大小
        int maxBufferCapacity = 5;

        // 需要指定两个参数
        // 第一个参数需要传递一个线程池，指定订阅者使用的线程
        // 第二个参数，需要指定一个缓冲区，发布者发布消息后，消息会扔到缓冲区里。
        SubmissionPublisher<Integer> publisher = new SubmissionPublisher<>(executor,maxBufferCapacity);

        // 绑定订阅者
        MySubscriber subscriber = new MySubscriber();
        publisher.subscribe(subscriber);

        // 发布消息
        for (int i = 0; i < 10; i++) {
            System.out.println(Thread.currentThread().getName() + "：发布消息：" + i);
            publisher.submit(i);
        }

        // 释放资源
        publisher.close();
        executor.shutdown();
    }
}